package com.tedu.api.thread;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;

/**
 * Lambda表达式：支持接口、抽象类【匿名内部类】创建
 *             -支持集合遍历-
 */
public class LambdaAPI {
    // Lambda表达式：-支持集合遍历 List、Set存值方式一致-
    @Test
    public void testList(){
        //List集合：重复并且有序--存数据【账户信息、IP地址】
        List<String> list=new ArrayList<>();
        list.add("lll");
        list.add("110112");
        list.add("15028957392");
        //查看集合信息---遍历三种：普通for、增强for、forEach方法
        for(String name:list){
            System.out.println("增强for集合中元素："+name);
        }
        //Lambda表达式支持集合--forEach(Lambda表达式)
       // list.forEach(name->System.out.println(name));
        list.forEach(new Consumer<String>() {
            public void accept(String name) {
                System.out.println(name);
            }
        });

    }
    //Lambda表达式：支持集合遍历 Map 键值对存值
    @Test
    public void testMap(){
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"账号");
        map.put(2,"密码");
        map.put(3,"手机号码");
        map.forEach(new BiConsumer<Integer, String>() {
            public void accept(Integer integer, String s) {
                System.out.println("键："+integer+"\n"+"值："+s);
            }
        });
        //map保存”Entry：键值对“  forEach()转成Lambda
        map.forEach((integer, s) -> System.out.println("键："+integer+"\n"+"值："+s));
    }

    /**
     * 单元测试：testLambdaHomeWork1【以此类推】  --周二12点前
     * 1.线程两种创建方式：使用Lambda表达式完成,参考”TR“
     * 2.找集合中：ListAPI：单元测试名：testSort：使用Lambda表达式完成
     * 3.找IO流--File类---“FilterAPI”：转换成匿名内部类转成Lambda
     *   使用Lambda表达式完成【5行搞定】
     * 4.找IO流--File类---”FilterAPI“：转换成匿名内部类转成Lambda
     *   使用Lambda表达式完成【2行搞定】
     *
     *
     *   Lambda  简化  匿名内部类---优化代码：方法省去-->不清楚方法名作用
     *
     */
    //1.线程两种创建方式：使用Lambda表达式完成
    public class HomeWork1 {
            public void main(String[] args) {
                //使用 Lambda 表达式创建线程并执行任务
                new Thread(() -> {
                    for (int i = 0; i < 1000; i++) {
                        System.out.println("给我学的呀，One 楞 One 楞的~");
                    }
                }).start();


                new Thread(() -> {
                    for (int i = 0; i < 1000; i++) {
                        System.out.println("我对你呀，One 心 One 意的~");
                    }
                }).start();
            }
        }
    //2.找集合中：ListAPI：单元测试名：testSort：使用Lambda表达式完成
    public class HomeWork2{
            public void main(String[] args) {
                List<String> list = new ArrayList<>();
                list.add("阿西吧");
                list.add("搜都寺内");
                list.add("呦西");
                Collections.sort(list);
                System.out.println("排序后集合：" + list);
                Collections.sort(list, (o1, o2) -> o1.length() - o2.length());
                System.out.println("按照文字长短进行集合排序：" + list);
        }
    }
    //3.找IO流--File类---“FilterAPI”：转换成匿名内部类转成Lambda使用Lambda表达式完成【5行搞定】
    FileFilter my=new FileFilter() {
        public boolean accept(File pathname) {
            String name=pathname.getName();
            System.out.println("过滤出来文件夹名字是："+name);
            return name.startsWith("s");
        }
    };
}